/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ejb;

import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import jpa.Servizio;
import jpa.Studente;
import jpa.Tipo;


@Stateless
public class GestioneServizi implements GestioneServiziLocal{

    @PersistenceContext
    private EntityManager em;

    @Override
    public List<Servizio> listaServizi() {
        Query query = em.createNamedQuery("Servizio.findAll");
        return query.getResultList();
    }

    @Override
    public List<Tipo> listaTipi() {
        Query query = em.createNamedQuery("Tipo.findAll");
        return query.getResultList();
    }

    private boolean verificaData(String g, String m, String a) {
        Integer anno = Integer.parseInt(a);
        Integer mese = Integer.parseInt(m);
        Integer giorno = Integer.parseInt(g);
        if (giorno<1||giorno>31||mese<1||mese>12||anno<0) {
            return false;
        }
        switch(mese.intValue()){
                case 2:{
                        if(giorno>29) {
                            return false;
                        }
                        if(giorno==29){
                                if(anno%4!=0) {
                                    return false;
                                }
                                if(anno%100==0 && anno%400!=0) {
                                    return false;
                                }
                        }
                };break;
                case 4:case 6:case 9:case 12:{
                        if(giorno>30) {
                            return false;
                        }
                };
        }
        return true;
    }

    @Override
    public boolean registra(Servizio s) {
        Query query = em.createNamedQuery("Servizio.findByTutorid");
        query.setParameter("tutorid", s.getTutorid());
        List<Servizio> servizi = query.getResultList();
        for(Servizio l : servizi){
            if(s.getData().equals(l.getData())) {
                return false;
            }
        }
        em.persist(s);
        em.flush();
        return true;
    }

    @Override
    public List<Servizio> listaServizi(Integer integer) {
        Query query = em.createNamedQuery("Servizio.findByStudenteid");
        query.setParameter("studenteid", integer);
        return query.getResultList();
    }

    @Override
    public String getNomeTipo(Integer integer) {
        return em.find(Tipo.class, integer).getNome();
    }

    @Override
    public LinkedList<String[]> appuntamentiTutor(int id) {
        LinkedList<String[]> result = new LinkedList<>();
        Query query = em.createNamedQuery("Servizio.findByTutorid");
        query.setParameter("tutorid", id);
        List<Servizio> lista = query.getResultList();
        Iterator it = lista.iterator();
        Date dataCor = new Date();
        while(it.hasNext()){
            Servizio s = (Servizio) it.next();
            if(s.getData().compareTo(dataCor) >= 0){
                String tipo = em.find(Tipo.class, s.getTipoid()).getNome();
                Studente stud = em.find(Studente.class, s.getStudenteid());
                String data = s.getData().toGMTString();
                String[] ris = new String[3];
                ris[0] = tipo;
                ris[1] = stud.getCognome() + " " + stud.getNome();
                ris[2] = data;
                result.add(ris);
            }
        }
        return result;
    }
}
